﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Classes.Banco;

namespace Classes.Administrativo
{
    public class clsMenu
    {
        #region VARIAVEIS GLOBAIS

        static string _strSql;
        string _cod, _str;
        List<string> Lista = new List<string>();
        string _StringConnection, _ProviderName, _TipoBanco;


        #endregion

        #region CONSTRUTOR/DESTRUTOR

        //Construtor
        //public ClsMenu()
        //    : base()
        //{
        //    //...
        //}
        public ClsMenu()
        {
        }
        #endregion              

        #region DADOS

        private int _Mnu_Grupo;

        public int Mnu_Grupo
        {
            get { return _Mnu_Grupo; }
            set { _Mnu_Grupo = value; }
        }
        private int _Mnu_Sub1;

        public int Mnu_Sub1
        {
            get { return _Mnu_Sub1; }
            set { _Mnu_Sub1 = value; }
        }
        private int _Mnu_Sub2;

        public int Mnu_Sub2
        {
            get { return _Mnu_Sub2; }
            set { _Mnu_Sub2 = value; }
        }
        private int _Mnu_Sub3;

        public int Mnu_Sub3
        {
            get { return _Mnu_Sub3; }
            set { _Mnu_Sub3 = value; }
        }
        private string _Mnu_Descricao;

        public string Mnu_Descricao
        {
            get { return _Mnu_Descricao; }
            set { _Mnu_Descricao = value; }
        }

        private Boolean _Mnu_HabilitaPerfil;

        public Boolean Mnu_HabilitaPerfil
        {
            get { return _Mnu_HabilitaPerfil; }
            set { _Mnu_HabilitaPerfil = value; }
        }

        #endregion
        
        #region METODOS (USADOS NA MENU)
        
        /// <summary>
        /// Busca na tabela Menu todos os registros do grupo que esta sendo passado;
        /// </summary>
        /// <param name="Mnu_Grupo"></param>
        /// <returns></returns>
        public DataTable Busca(int Mnu_Grupo)
        {
            
            try
            {
                clsBanco bd = new clsBanco();
                _strSql = "SELECT * FROM Menu";
                if (Mnu_Grupo != 0)
                    _strSql += " WHERE Mnu_Grupo =" + Mnu_Grupo;

                bd.ComandoSql.CommandText = _strSql; 
                return RetornarDataTable();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                           
            }
        }

        /// <summary>
        /// Usada internamente no Deletar (Menu); 
        /// Verifica se o menu que esta sendo passado para ser deletado
        /// possue filhos se sim este não poderá ser excluido senão será excluido;
        /// </summary>
        /// <param name="Mnu_Grupo"></param>
        /// <param name="Mnu_Sub1"></param>
        /// <param name="Mnu_Sub2"></param>
        /// <param name="Mnu_Sub3"></param>
        /// <param name="Mnu_Sub4"></param>
        /// <returns></returns>
        public DataTable Busca(int Mnu_Grupo, int Mnu_Sub1, int Mnu_Sub2, int Mnu_Sub3, int Mnu_Sub4)
        {
            
            try
            {
                _strSql = "SELECT * FROM Menu WHERE Mnu_Grupo = " + Mnu_Grupo;
                if (Mnu_Sub1 > 0)
                    _strSql = _strSql + " AND Mnu_Sub1 = " + Mnu_Sub1;
                if (Mnu_Sub2 > 0)
                    _strSql = _strSql + " AND Mnu_Sub1 = " + Mnu_Sub2;
                if (Mnu_Sub3 > 0)
                    _strSql = _strSql + " AND Mnu_Sub1 = " + Mnu_Sub3;
                if (Mnu_Sub4 > 0)
                    _strSql = _strSql + " AND Mnu_Sub1 = " + Mnu_Sub4;

                clsBanco bd = new clsBanco();
                bd.ComandoSql.CommandText = _strSql; 
                return bd.RetornarDataTable();
            }
            catch
            {
                return null;
            }
            finally
            {
               
            }
        }
        
        /// <summary>
        /// Busca na tabela Menu todos os registros do grupo que esta sendo passado;
        /// Trazendo tambem o nomeTabela que será o nome do nó pai (pai de todos);
        /// </summary>
        /// <param name="Mnu_Grupo"></param>
        /// <param name="nomeTabela"></param>
        /// <returns></returns>
        public DataTable BuscaMenu(int Mnu_Grupo, string nomeTabela)
        {
            
            DataTable _dt = new DataTable();
            try
            {
                _strSql = "SELECT * FROM Menu WHERE Mnu_Grupo =" + Mnu_Grupo;
                
                clsBanco bd = new clsBanco();
                bd.ComandoSql.CommandText = _strSql; 
                return bd.RetornarDataTable();                
            }
            catch (Exception ex)
            {
                return null;
                throw ex;
            }
            finally
            {
               
            }
        }
      
        //Utilizado tela de cad Menu
        /// <summary>
        /// Pega o text do node, separa o codigo do nome, verifica se o nó esta
        /// checked,se true PMnu_Habilita recebe 1, se false PMnu_Habilita recebe 0;
        /// Usado para verificar e atualizar o Check do datagridview do CadMenu; 
        /// Se PMnu_Habilita for true significa que este menu estará disponivel para o 
        /// sistema;
        /// </summary>
        /// <param name="listaNos"></param>
        /// <param name="dt"></param>
        //public DataTable AtualizaDtgMenu(DataGridViewRow _row, DataTable dt)
        //{
        //    DataRow[] Row;

        //    DataTable _dtnosAlteracao = new DataTable();
        //    try
        //    {
        //        _dtnosAlteracao = dt.Clone();
        //        //_dtnosAlteracao.Clear();
        //        //Row = dt.Select(" Mnu_Grupo = " + _row.Cells[0].Value.ToString());
        //        //for (int j = 0; j < Row.Length; j++)
        //        //{
        //        //    _dtnosAlteracao.ImportRow(Row[j]);
        //        //}

        //        _dtnosAlteracao = dt;

        //        //verifica o nivel do item
        //        _cod =_row.Cells[0].Value.ToString();
        //        ///verifica se não esta em um filho do menu grupo 
        //        if (Convert.ToInt32(_row.Cells[1].Value) > 0)
        //        {
        //            _cod += "|" + _row.Cells[1].Value.ToString();
        //        }
        //        if (Convert.ToInt32(_row.Cells[2].Value) > 0)
        //        {
        //            _cod += "|" + _row.Cells[2].Value.ToString();
        //        }
        //        if (Convert.ToInt32(_row.Cells[3].Value) > 0)
        //        {
        //            _cod += "|" + _row.Cells[3].Value.ToString();
        //        }
        //        if (Convert.ToInt32(_row.Cells[4].Value) > 0)
        //        {
        //            _cod += "|" + _row.Cells[4].Value.ToString();//pega o cod concatenado
        //        }
        //        //desc = dt.Rows[i]["Mnu_Descricao"].ToString();//pega a desc
        //        int nivel = Utils.ClsComponentes.conta_ocorrencias('|', _cod);//+= dt.Rows[i]["Mnu_Sub1"].ToString().Length;

        //        {
        //            //verifica nos para serem atualizados
        //            for (int i = nivel ; i >= 0; i--)
        //            {
        //                Row = null;
        //                switch (i)
        //                {
        //                    case 0:
        //                        _str = " Mnu_Grupo = " + _row.Cells[0].Value.ToString() +
        //                               " AND Mnu_HabilitaPerfil = " + !Convert.ToBoolean(_row.Cells[7].Value) +
        //                               " AND Mnu_NomeForm = ''";

        //                        Row = dt.Select(_str);
        //                        if (Row.Length > 1 && Convert.ToBoolean(Row[0].ItemArray[7]) && Convert.ToBoolean(Row[1].ItemArray[7]))
        //                        {
        //                            _str = string.Empty;
        //                            break;
        //                        }
        //                        else
        //                        {
        //                            _str = " Mnu_Grupo = " + _row.Cells[0].Value.ToString() +
        //                                  " AND Mnu_Sub1 = 0" +
        //                                  " AND Mnu_Sub2 = 0" +
        //                                  " AND Mnu_Sub3 = 0" +
        //                                  " AND Mnu_Sub4 = 0";
        //                        }
        //                        break;
        //                    case 1:
        //                        _str = " Mnu_Grupo = " + _row.Cells[0].Value.ToString() +
        //                              " AND Mnu_Sub1 = " + _row.Cells[1].Value.ToString() +
        //                              " AND Mnu_HabilitaPerfil = " + !Convert.ToBoolean(_row.Cells[7].Value) +
        //                              " AND Mnu_NomeForm <> ''";
        //                        //Row = dt.Select(_str);
        //                        Row = _dtnosAlteracao.Select(_str);
        //                        if (Row.Length > 1 && Convert.ToBoolean(Row[0].Table.Rows[1][7]))
        //                        {
        //                            _str = string.Empty;
        //                            break;
        //                        }
        //                        else
        //                        {
        //                            _str = " Mnu_Grupo = " + _row.Cells[0].Value.ToString() +
        //                                  " AND Mnu_Sub1 = " + _row.Cells[1].Value.ToString() +
        //                                  " AND Mnu_Sub2 = 0" +
        //                                  " AND Mnu_Sub3 = 0" +
        //                                  " AND Mnu_Sub4 = 0";
        //                        }
        //                        break;
        //                    case 2:
        //                        _str = " Mnu_Grupo = " + _row.Cells[0].Value.ToString() +
        //                              " AND Mnu_Sub1 = " + _row.Cells[1].Value.ToString() +
        //                              " AND Mnu_Sub2 = " + _row.Cells[2].Value.ToString() +
        //                              " AND Mnu_Sub3 = 0" +
        //                              " AND Mnu_Sub4 = 0";
        //                        break;
        //                    case 3:
        //                        _str = " Mnu_Grupo = " + _row.Cells[0].Value.ToString() +
        //                              " AND Mnu_Sub1 = " + _row.Cells[1].Value.ToString() +
        //                              " AND Mnu_Sub2 = " + _row.Cells[2].Value.ToString() +
        //                              " AND Mnu_Sub3 = " + _row.Cells[3].Value.ToString() +
        //                              " AND Mnu_Sub4 = 0";
        //                        break;
        //                    case 4:
        //                        _str = " Mnu_Grupo = " + _row.Cells[0].Value.ToString() +
        //                              " AND Mnu_Sub1 = " + _row.Cells[1].Value.ToString() +
        //                              " AND Mnu_Sub2 = " + _row.Cells[2].Value.ToString() +
        //                              " AND Mnu_Sub3 = " + _row.Cells[3].Value.ToString() +
        //                              " AND Mnu_Sub4 = " + _row.Cells[4].Value.ToString();
        //                        break;
        //                }
        //                if (_str != string.Empty)
        //                {
        //                    //Row = dt.Select(_str);
        //                    Row = _dtnosAlteracao.Select(_str);
        //                    //atualiza o campo habilitado
        //                    for (int j = 0; j < Row.Length; j++)
        //                    {
        //                        Row[j]["Mnu_HabilitaPerfil"] = _row.Cells["Mnu_HabilitaPerfil"].Value;
        //                    }
        //                }
        //                else
        //                {
        //                    _dtnosAlteracao.Rows[_row.Index]["Mnu_HabilitaPerfil"] = _row.Cells["Mnu_HabilitaPerfil"].Value;
        //                }
        //            }
        //            //atualiza posterior
        //            if (_row.Cells[6].Value.ToString() == string.Empty)
        //            {
        //                _str = " Mnu_Grupo = " + _row.Cells[0].Value.ToString();
        //                if (Convert.ToInt32(_row.Cells[1].Value) > 0)
        //                    _str += " AND Mnu_Sub1 = " + _row.Cells[1].Value.ToString();
        //                if (Convert.ToInt32(_row.Cells[2].Value) > 0)
        //                    _str += " AND Mnu_Sub2 = " + _row.Cells[2].Value.ToString();
        //                if (Convert.ToInt32(_row.Cells[3].Value) > 0)
        //                    _str += " AND Mnu_Sub3 = " + _row.Cells[3].Value.ToString();
        //                if (Convert.ToInt32(_row.Cells[4].Value) > 0)
        //                    _str += " AND Mnu_Sub4 = " + _row.Cells[3].Value.ToString();
        //                //Row = dt.Select(_str);
        //                Row = _dtnosAlteracao.Select(_str);
        //                for (int j = 0; j < Row.Length; j++)
        //                {
        //                    Row[j]["Mnu_HabilitaPerfil"] = _row.Cells["Mnu_HabilitaPerfil"].Value;
        //                }
        //            }
        //        }

        //        return _dtnosAlteracao;
        //    }
        //    catch (Exception ex)
        //    {
        //        throw ex;
        //    }
        //    finally
        //    {
                
        //    }
        //}

        /// <summary>
        /// Retorna o menu do usuario que está logando no sistema;
        /// Quando o usuario for (AFK) Mnu_HabilitaPerfil receberá true,
        /// para que tenha acesso a todo o sistema;
        /// Quando for usuario comum será retornado o menu de acordo com o
        /// perfil que foi dado a este usuario;
        /// </summary>
        /// <param name="Login"></param>
        /// <returns></returns>
        public DataTable retornaGrupoMenu(string Login)
        {
            string _sql;
            _sql = "SELECT * FROM Menu WHERE Mnu_Sub1 = 0 " +
                                                " AND Mnu_Sub2 = 0 " +
                                                " AND Mnu_Sub3 = 0 " +
                                                " AND Mnu_Sub4 = 0 ";
            if (Login.ToLower().Trim() != "systemadmafk2020")
                _sql = _sql + " AND Mnu_HabilitaPerfil = 1 ";
            _sql = _sql +  " Order By Mnu_Grupo ";
            
            try
            {
                DataTable dt = new DataTable();
                _strSql = (_sql);
                dt = RetornarDataTable(_strSql);
                return dt;
            }
            catch
            {
                return null;
            }
            finally
            {
                
            }
        }

        /// <summary>
        /// Prepara DataGridView do CadMenu;
        /// Monta toda a datagridview que está no frmCadMenu;
        /// Já com a formatação definida neste metodo;
        /// </summary>
        /// <param name="dtg"></param>
        public void PreparaDw(DataGridView dtg)
        {
            
            DataTable ds = new DataTable();
            ds = RetornarDataTable("SELECT * FROM Menu");
            dtg.DataSource = ds;
            dtg.Columns[0].HeaderText = "Grupo";
            dtg.Columns[0].Width = 58;
            dtg.Columns[0].ReadOnly = true;
            dtg.Columns[1].HeaderText = "Sub 1";
            dtg.Columns[1].Width = 58;
            dtg.Columns[1].ReadOnly = true;
            dtg.Columns[2].HeaderText = "Sub 2";
            dtg.Columns[2].Width = 58;
            dtg.Columns[2].ReadOnly = true;
            dtg.Columns[3].HeaderText = "Sub 3";
            dtg.Columns[3].Width = 58;
            dtg.Columns[3].ReadOnly = true;
            dtg.Columns[4].HeaderText = "Sub 4";
            dtg.Columns[4].Width = 58;
            dtg.Columns[4].ReadOnly = true;
            dtg.Columns[5].HeaderText = "Descrição";
            dtg.Columns[5].Width = 145;
            dtg.Columns[5].ReadOnly = true;
            dtg.Columns[6].HeaderText = "Nome do Formulário";
            dtg.Columns[6].Width = 130;
            dtg.Columns[6].ReadOnly = true;
            dtg.Columns[7].HeaderText = "Hab.Perfil";
            dtg.Columns[7].Width = 60;
            //dtg.Columns[7].ReadOnly = true;
            //dtg.Columns[8].HeaderText = "Tp. Aplic.";
            //dtg.Columns[8].Width = 80;
            //dtg.Columns[8].ReadOnly = true;
        }      
            
        /// <summary>
        /// Usada internamente nos dois metodos GravaAltera (abaixo);
        /// Verifica se o Menu que esta sendo gravado já existe ou nao existe;
        /// Se existe (Update) senao (Insert);
        /// Neste metodo esta sendo passado o MyDbCommand;
        /// </summary>
        /// <param name="Mnu_Grupo"></param>
        /// <param name="Mnu_Sub1"></param>
        /// <param name="Mnu_Sub2"></param>
        /// <param name="Mnu_Sub3"></param>
        /// <param name="Mnu_Sub4"></param>
        /// <param name="cmd"></param>
        /// <returns></returns>
        public bool VerificaMenu(int Mnu_Grupo, int Mnu_Sub1, int Mnu_Sub2, int Mnu_Sub3, int Mnu_Sub4, DbCommand cmd)
        {
            
            DataTable _dt;
            try
            {
                _strSql = "SELECT * FROM Menu " +
                    " WHERE Mnu_Grupo =" + Mnu_Grupo +
                    " AND Mnu_Sub1 =" + Mnu_Sub1 +
                    " AND Mnu_Sub2 =" + Mnu_Sub2 +
                    " AND Mnu_Sub3 =" + Mnu_Sub3 +
                    " AND Mnu_Sub4 =" + Mnu_Sub4;
                _dt = RetornarDataTable(_strSql, cmd);
                if (_dt.Rows.Count > 0)
                    return true;
                else
                    return false;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
               
            }
        }
        
        /// <summary>
        /// Usada internamente nos dois metodos GravaAltera (abaixo);
        /// Verifica se o Menu que esta sendo gravado já existe ou nao existe;
        /// Se existe (Update) senao (Insert);
        /// </summary>
        /// <param name="Mnu_Grupo"></param>
        /// <param name="Mnu_Sub1"></param>
        /// <param name="Mnu_Sub2"></param>
        /// <param name="Mnu_Sub3"></param>
        /// <param name="Mnu_Sub4"></param>
        /// <returns></returns>
        public bool VerificaMenu(int Mnu_Grupo, int Mnu_Sub1, int Mnu_Sub2, int Mnu_Sub3, int Mnu_Sub4)
        {
            
            DataTable _dt;
            try
            {
                _strSql = "SELECT * FROM Menu " +
                    " WHERE Mnu_Grupo =" + Mnu_Grupo +
                    " AND Mnu_Sub1 =" + Mnu_Sub1 +
                    " AND Mnu_Sub2 =" + Mnu_Sub2 +
                    " AND Mnu_Sub3 =" + Mnu_Sub3 +
                    " AND Mnu_Sub4 =" + Mnu_Sub4;
                _dt = RetornarDataTable(_strSql);
                if (_dt.Rows.Count > 0)
                    return true;
                else
                    return false;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                
            }
        }

        /// <summary>
        /// Usada CadMenu para gravar um novo menu;
        /// Usada tambem para fazer alterações nos menus já existentes;
        /// Esta é chamada na função (salvar) do frmCadMenu;
        /// </summary>
        public void GravarAlterar()
        {

            //            
            try
            {

                if (!VerificaMenu(_Mnu_Grupo, _Mnu_Sub1, _Mnu_Sub2, _Mnu_Sub3, _Mnu_Sub4))
                {
                    //_strSql = "INSERT INTO Menu " +
                    //            "(Mnu_Grupo, " +
                    //            "  Mnu_Sub1, " +
                    //            "  Mnu_Sub2, " +
                    //            "  Mnu_Sub3, " +
                    //            "  Mnu_Sub4, " +
                    //            "  Mnu_Descricao, " +
                    //            "  Mnu_NomeForm, " +
                    //            "  Mnu_HabilitaPerfil, " +
                    //            "  Mnu_TpAplc, " +
                    //            "  Mnu_Argumento, " +
                    //            "  Mnu_IniciarEm	)" +
                    //        "VALUES " +
                    //        " (" + _Mnu_Grupo + "," +
                    //        _Mnu_Sub1 + "," +
                    //        _Mnu_Sub2 + "," +
                    //        _Mnu_Sub3 + "," +
                    //        _Mnu_Sub4 + ",'" +
                    //        _Mnu_Descricao + "','" +
                    //        _Mnu_NomeForm + "'," +
                    //        Convert.ToInt32(_Mnu_HabilitaPerfil) + ",'" +
                    //    //Convert.ToBoolean(_Mnu_HabilitaPerfil) + ",'" +
                    //        _Mnu_TpAplic + "','" +
                    //        _Mnu_Argumento + "','" +
                    //        _Mnu_IniciarEm + "')";

                    IncluirMenu(_Mnu_Grupo
                              , _Mnu_Sub1
                              , _Mnu_Sub2
                              , _Mnu_Sub3
                              , _Mnu_Sub4
                              , Convert.ToInt32(_Mnu_HabilitaPerfil)
                              , _Mnu_Descricao
                              , _Mnu_NomeForm
                              , _Mnu_TpAplic
                              , _Mnu_Argumento
                              , _Mnu_IniciarEm
                               );
                }
                else
                {
                    //_strSql = " UPDATE Menu " +
                    //    " SET Mnu_Descricao = '" + _Mnu_Descricao + "'" +
                    //    " , Mnu_NomeForm = '" + _Mnu_NomeForm + "'" +
                    //    " , Mnu_HabilitaPerfil = " + Convert.ToInt32(_Mnu_HabilitaPerfil) +
                    //    " , Mnu_Argumento = '" + _Mnu_Argumento + "'" +
                    //    " , Mnu_IniciarEm = '" + _Mnu_IniciarEm + "'" +
                    //    //" , Mnu_HabilitaPerfil = " + Convert.ToBoolean(_Mnu_HabilitaPerfil) +
                    //    " , Mnu_TpAplc = '" + _Mnu_TpAplic + "'" +
                    //    " WHERE Mnu_Grupo = " + _Mnu_Grupo +
                    //    " AND Mnu_Sub1 = " + _Mnu_Sub1 +
                    //    " AND Mnu_Sub2 = " + _Mnu_Sub2 +
                    //    " AND Mnu_Sub3 = " + _Mnu_Sub3 +
                    //    " AND Mnu_Sub4 = " + _Mnu_Sub4;
                    AlterarMenu(_Mnu_Grupo
                              , _Mnu_Sub1
                              , _Mnu_Sub2
                              , _Mnu_Sub3
                              , _Mnu_Sub4
                              , Convert.ToInt32(_Mnu_HabilitaPerfil)
                              , _Mnu_Descricao
                              , _Mnu_NomeForm
                              , _Mnu_TpAplic
                              , _Mnu_Argumento
                              , _Mnu_IniciarEm
                               );
                }
                //
                //Lista.Add(_strSql);
                //
                //GravaPerfilMenu(Mnu_Grupo, Mnu_Sub1, Mnu_Sub2, Mnu_Sub3, Mnu_Sub4, Mnu_HabilitaPerfil, Lista);
                //
                if (Convert.ToInt32(_Mnu_HabilitaPerfil) == 0)
                {
                    ExclusaoPerfilMenu(Convert.ToInt32(_Mnu_Grupo)
                                                           , _Mnu_Sub1
                                                           , _Mnu_Sub2
                                                           , _Mnu_Sub3
                                                           , _Mnu_Sub4
                                                           , 0
                        );

                    ExclusaoUsuarioPerfil(Convert.ToInt32(_Mnu_Grupo)
                                                        , _Mnu_Sub1
                                                        , _Mnu_Sub2
                                                        , _Mnu_Sub3
                                                        , _Mnu_Sub4
                                                        , 0
                                                        , string.Empty
                    );
                }


                ExecutarComandoTransacao(Lista);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {

                Lista.Clear();

            }
        }

        public void IncluirMenu(int Mnu_Grupo
                                , int Mnu_Sub1
                                , int Mnu_Sub2
                                , int Mnu_Sub3
                                , int Mnu_Sub4
                                , int UMnu_Habilita
                                , string Mnu_Descricao
                                , string Mnu_NomeForm
                                , string UMnu_TpAplc
                                , string UMnu_Argumento
                                , string UMnu_IniciarEm
            )
        {
            StringBuilder _sql = new StringBuilder();
            try
            {
                _sql.Append(" INSERT INTO Menu ");
                _sql.Append("( Mnu_Grupo, ");
                _sql.Append("  Mnu_Sub1, ");
                _sql.Append("  Mnu_Sub2, ");
                _sql.Append("  Mnu_Sub3, ");
                _sql.Append("  Mnu_Sub4, ");
                _sql.Append("  Mnu_Descricao, ");
                _sql.Append("  Mnu_NomeForm, ");
                _sql.Append("  Mnu_HabilitaPerfil, ");
                _sql.Append("  Mnu_TpAplc, ");
                _sql.Append("  Mnu_Argumento, ");
                _sql.Append("  Mnu_IniciarEm)");
                _sql.Append(" VALUES ");
                _sql.Append(" (" + Mnu_Grupo + ",");
                _sql.Append(Mnu_Sub1 + ", ");
                _sql.Append(Mnu_Sub2 + ", ");
                _sql.Append(Mnu_Sub3 + ", ");
                _sql.Append(Mnu_Sub4 + ", '");
                _sql.Append(Mnu_Descricao + "', '");
                _sql.Append(Mnu_NomeForm + "', ");
                _sql.Append(UMnu_Habilita + ", '");
                _sql.Append(UMnu_TpAplc + "', '");
                _sql.Append(UMnu_Argumento + "', '");
                _sql.Append(UMnu_IniciarEm + "')");

                Lista.Add(_sql.ToString());
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void AlterarMenu(int Mnu_Grupo
                                , int Mnu_Sub1
                                , int Mnu_Sub2
                                , int Mnu_Sub3
                                , int Mnu_Sub4
                                , int UMnu_Habilita
                                , string Mnu_Descricao
                                , string Mnu_NomeForm
                                , string UMnu_TpAplc
                                , string UMnu_Argumento
                                , string UMnu_IniciarEm
            )
        {
            StringBuilder _sql = new StringBuilder();
            try
            {
                _sql.Append(" UPDATE Menu ");
                _sql.Append(" SET Mnu_Descricao = '" + Mnu_Descricao + "'");
                _sql.Append(" , Mnu_NomeForm = '" + Mnu_NomeForm + "'");
                _sql.Append(" , Mnu_HabilitaPerfil = " + UMnu_Habilita);
                _sql.Append(" , Mnu_TpAplc = '" + UMnu_TpAplc + "'");
                _sql.Append(" , Mnu_Argumento = '" + UMnu_Argumento + "'");
                _sql.Append(" , Mnu_IniciarEm = '" + UMnu_IniciarEm + "'");
                _sql.Append(" WHERE Mnu_Grupo = " + Mnu_Grupo);
                _sql.Append(" AND Mnu_Sub1 = " + Mnu_Sub1);
                _sql.Append(" AND Mnu_Sub2 = " + Mnu_Sub2);
                _sql.Append(" AND Mnu_Sub3 = " + Mnu_Sub3);
                _sql.Append(" AND Mnu_Sub4 = " + Mnu_Sub4);
                
                Lista.Add(_sql.ToString());
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// Usada para gravar os check do datagriview do CadMenu;
        /// Este metodo é chamado no evento (CellContentClick) do datagridview,
        /// que esta no frmCadMenu;
        /// Usada tambem internamente, chamando o GravaPerfilMenu, para que os 
        /// perfis que foram habilitados ou desabilitados apareçam na perfilmenu;
        /// </summary>
        /// <param name="_dt"></param>
        public void GravarAlterar(DataTable _dt, int Per_Codigo)
        {
            
            //
            try
            {
                foreach (DataRow _row in _dt.Rows)
                {
                    if (!VerificaMenu(Convert.ToInt32(_row["Mnu_Grupo"]),
                        Convert.ToInt32(_row["Mnu_Sub1"]),
                        Convert.ToInt32(_row["Mnu_Sub2"]),
                        Convert.ToInt32(_row["Mnu_Sub3"]),
                        Convert.ToInt32(_row["Mnu_Sub4"])))
                    {
                        //_strSql = "INSERT INTO Menu " +
                        //            "(Mnu_Grupo, " +
                        //            "  Mnu_Sub1, " +
                        //            "  Mnu_Sub2, " +
                        //            "  Mnu_Sub3, " +
                        //            "  Mnu_Sub4, " +
                        //            "  Mnu_Descricao, " +
                        //            "  Mnu_NomeForm, " +
                        //            "  Mnu_HabilitaPerfil)" +
                        //        "VALUES " +
                        //        " (" + _row["Mnu_Grupo"] + "," +
                        //        _row["Mnu_Sub1"] + "," +
                        //        _row["Mnu_Sub2"] + "," +
                        //        _row["Mnu_Sub3"] + "," +
                        //        _row["Mnu_Sub4"] + ",'" +
                        //        _row["Mnu_Descricao"] + "','" +
                        //        _row["Mnu_NomeForm"] + "'," +
                        //        Convert.ToInt32(_row["Mnu_HabilitaPerfil"]) + ")";
                                //Convert.ToBoolean(_row["Mnu_HabilitaPerfil"]) + ")";
                        IncluirMenu(Convert.ToInt32(_row["Mnu_Grupo"])
                                                               , Convert.ToInt32(_row["Mnu_Sub1"])
                                                               , Convert.ToInt32(_row["Mnu_Sub2"])
                                                               , Convert.ToInt32(_row["Mnu_Sub3"])
                                                               , Convert.ToInt32(_row["Mnu_Sub4"])
                                                               , Convert.ToInt32(_row["Mnu_HabilitaPerfil"])
                                                               , _row["Mnu_Descricao"].ToString()
                                                               , _row["Mnu_NomeForm"].ToString()
                                                               , _row["Mnu_TpAplc"].ToString()
                                                               , _row["Mnu_Argumento"].ToString()
                                                               , _row["Mnu_IniciarEm"].ToString()
                            );
                    }
                    else
                    {
                        //_strSql = " UPDATE Menu " +
                        //    " SET Mnu_Descricao = '" + _row["Mnu_Descricao"] + "'" +
                        //    " , Mnu_NomeForm = '" + _row["Mnu_NomeForm"] + "'" +
                        //    " , Mnu_HabilitaPerfil = " + Convert.ToInt32(_row["Mnu_HabilitaPerfil"]) +
                        //    //" , Mnu_HabilitaPerfil = " + Convert.ToBoolean(_row["Mnu_HabilitaPerfil"]) +
                        //    " WHERE Mnu_Grupo = " + _row["Mnu_Grupo"] +
                        //    " AND Mnu_Sub1 = " + _row["Mnu_Sub1"] +
                        //    " AND Mnu_Sub2 = " + _row["Mnu_Sub2"] +
                        //    " AND Mnu_Sub3 = " + _row["Mnu_Sub3"] +
                        //    " AND Mnu_Sub4 = " + _row["Mnu_Sub4"];
                        AlterarMenu(Convert.ToInt32(_row["Mnu_Grupo"])
                                                               , Convert.ToInt32(_row["Mnu_Sub1"])
                                                               , Convert.ToInt32(_row["Mnu_Sub2"])
                                                               , Convert.ToInt32(_row["Mnu_Sub3"])
                                                               , Convert.ToInt32(_row["Mnu_Sub4"])
                                                               , Convert.ToInt32(_row["Mnu_HabilitaPerfil"])
                                                               , _row["Mnu_Descricao"].ToString()
                                                               , _row["Mnu_NomeForm"].ToString()
                                                               , _row["Mnu_TpAplc"].ToString()
                                                               , _row["Mnu_Argumento"].ToString()
                                                               , _row["Mnu_IniciarEm"].ToString()
                            );

                    }

                    //Adiciono instrucao sql na lista;
                    //Lista.Add(_strSql);

                    if (Convert.ToInt32(_row["Mnu_HabilitaPerfil"]) == 0)
                    {
                        ExclusaoPerfilMenu(Convert.ToInt32(_row["Mnu_Grupo"])
                                                               , Convert.ToInt32(_row["Mnu_Sub1"])
                                                               , Convert.ToInt32(_row["Mnu_Sub2"])
                                                               , Convert.ToInt32(_row["Mnu_Sub3"])
                                                               , Convert.ToInt32(_row["Mnu_Sub4"])
                                                               , Per_Codigo
                            );

                        ExclusaoUsuarioPerfil(Convert.ToInt32(_row["Mnu_Grupo"])
                                                           , Convert.ToInt32(_row["Mnu_Sub1"])
                                                           , Convert.ToInt32(_row["Mnu_Sub2"])
                                                           , Convert.ToInt32(_row["Mnu_Sub3"])
                                                           , Convert.ToInt32(_row["Mnu_Sub4"])
                                                           , 0
                                                           , string.Empty
                        );
                    }
                    //
                    //GravaPerfilMenu(Convert.ToInt32(_row["Mnu_Grupo"]),
                    //    Convert.ToInt32(_row["Mnu_Sub1"]),
                    //    Convert.ToInt32(_row["Mnu_Sub2"]),
                    //    Convert.ToInt32(_row["Mnu_Sub3"]),
                    //    Convert.ToInt32(_row["Mnu_Sub4"]), Convert.ToBoolean(_row["Mnu_HabilitaPerfil"]), Lista);
                }
                //
                ExecutarComandoTransacao(Lista);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
               
                Lista.Clear();
                
            }
        }
      
        /// <summary>
        /// Verifica se o menu possue filhos se o menu possue filhos estes nao pode 
        /// ser deletado, senao delata o menu
        /// </summary>
        /// <param name="Mnu_Grupo"></param>
        /// <param name="Mnu_Sub1"></param>
        /// <param name="Mnu_Sub2"></param>
        /// <param name="Mnu_Sub3"></param>
        /// <param name="Mnu_Sub4"></param>
        /// <returns></returns>
        public string Deletar(int Mnu_Grupo, int Mnu_Sub1, int Mnu_Sub2, int Mnu_Sub3, int Mnu_Sub4)
        {
            
            //
            DataTable _dt;
            //            
            try
            {
                _dt = Busca(Mnu_Grupo, Mnu_Sub1, Mnu_Sub2, Mnu_Sub3, Mnu_Sub4);
                if (_dt.Rows.Count > 1)
                {
                    return "Menu possui sub-itens. Operação cancelada!";
                }
                else
                {
                    _strSql = " DELETE FROM Menu " +
                             " WHERE Mnu_Grupo = " + Mnu_Grupo +
                            " AND Mnu_Sub1 = " + Mnu_Sub1 +
                            " AND Mnu_Sub2 = " + Mnu_Sub2 +
                            " AND Mnu_Sub3 = " + Mnu_Sub3 +
                            " AND Mnu_Sub4 = " + Mnu_Sub4;
                    //
                    Lista.Add(_strSql);
                    //
                    ExecutarComandoTransacao(Lista);
                    //
                    return "Operação realizada com sucesso!";
                }
            }
            catch (Exception ex)
            {
                return "Ocorreu um erro nesta operação!\n" + ex.Message;
            }
            finally
            {
                Lista.Clear();
            }
        }

        /// <summary>
        /// Serve para retornar o formato dos campos de data
        /// </summary>
        /// <param name="idEmpresa">é o id da emprsa</param>
        /// <param name="tipo">Se o tipo vir como D = somente data
        /// porém se vir como H = data + hora</param>
        /// <returns></returns>
        public string RetornaFormatoData(int idEmpresa, string tipo)
        {
            DataTable _dt = new DataTable();
            try
            {
                _strSql = "select cfg_Valor from userconfig" +
                    " where cfg_Sequencia = ";
                if (tipo == "D")
                    _strSql = _strSql + "31"; //retorna o formato yyyy/mm/dd
                else
                    _strSql = _strSql + "53";
                _strSql = _strSql + " and cfg_codemp = " + idEmpresa; //Retorna o formato yyyy/mm/dd hh:mm:ss

                _dt = RetornarDataTable(_strSql.ToString());

                //return "'" + _dt.Rows[0]["cfg_Valor"].ToString() + "'";
                    return _dt.Rows[0]["cfg_Valor"].ToString();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally 
            {
                _dt.Dispose();
            }
        }

        /// <summary>
        /// Usado para abrir .Exe no Menu.
        /// </summary>
        /// <param name="_dt">Datatable com informações sobre a tela a ser aberta</param>
        /// <param name="Caminho">Caminho do .exe</param>
        /// <param name="NomeFantasia">Nome fantasia da Empresa</param>
        /// <param name="CodEmpresa">Código da Empresa</param>
        /// <param name="IdUsuario">Id do usuário</param>
        /// <param name="Login">Login do Usuário</param>
        /// <param name="ClacCodigo">Código da Classificação do Usuário</param>
        /// <param name="CampoLivre">Para evitar que fosse criado vários paramentro na chamada de Exe do Visual Commerce
        /// Foi criado este campo, caso ele venha diferente de vazio, vai ser passado, o campo a ser verificado 
        /// no case do vb, como por exemplo CadProduto, caso este não seja necessário, passar por pametro ""</param>
        /// <param name="ValorLivre">Caso seja passado o Campo livre tem que ser passado, tem que ser passado 
        /// o valor a ser enviado para para o vb, pois e neste campo que vai os valores, caso ele não seja 
        /// utilizado passar por parametro ":"</param>
        /// <returns></returns>
        public bool ExecultaPrograma(DataTable _dt, string Caminho, string NomeFantasia, string CodEmpresa, int IdUsuario, string Login, int ClacCodigo, string CampoLivre, string ValorLivre)
        {
            try
            {
                #region EXE
                if (File.Exists(_dt.Rows[0]["Mnu_NomeForm"].ToString().Replace("|", "\\")))
                {
                    //caminho = _dt.Rows[0]["Mnu_NomeForm"].ToString().Replace("|", "\\");
                    //System.Diagnostics.Process.Start(caminho);
                    Process p = new Process();
                    p.StartInfo.RedirectStandardOutput = true;
                    p.StartInfo.UseShellExecute = false;
                    //p.StartInfo.FileName = @"\\10.1.1.18\dssbi\Architect.exe";//exe de execução para o arquivo
                    p.StartInfo.FileName = _dt.Rows[0]["Mnu_NomeForm"].ToString().Replace("|", "\\");//@"C:\orant\BIN\ifrun60.EXE";//exe de execução para o arquivo
                    if (!string.IsNullOrEmpty(_dt.Rows[0]["Mnu_Argumento"].ToString()))
                    {
                        p.StartInfo.Arguments = _dt.Rows[0]["Mnu_Argumento"].ToString();//"commerce.fmx";//argumento de inicio
                    }
                    if (!string.IsNullOrEmpty(_dt.Rows[0]["Mnu_IniciarEm"].ToString()))
                    {
                        p.StartInfo.WorkingDirectory = _dt.Rows[0]["Mnu_IniciarEm"].ToString().Replace("|", "\\");//@"\\10.1.1.5\Commerce\\";//iniciar em
                    }
                    p.Start();
                    p.Dispose();
                }
                else
                {
                    ///Vai ser usado para passagem dos parametros para o aplicativo do VB
                    ///é separado os parametro através do "|"
                    Caminho = Caminho + @"\EXE" + @"\" + _dt.Rows[0]["Mnu_NomeForm"].ToString() + ".exe";
                    ///verifica se o usuario logado é um administrador para os sistemas visualcommerce
                    ///definido administrador como diretor e gerente
                    ///os demais serão tratados como não administrador.
                    int adm = 0;
                    switch (ClacCodigo.ToString())
                    {
                        case "1":
                        case "2":
                            adm = 1;
                            break;
                    }
                    System.Diagnostics.Process.Start(Caminho, NomeFantasia + "|" + CodEmpresa + "|" + IdUsuario + "|" + Login + "|" + adm.ToString() + "|" + CampoLivre + ":" + ValorLivre);
                }
                #endregion EXE
                return true;
            }
            catch 
            {
                return false;
            }
            finally
            {
 
            }
        }
        
        #endregion
       
        #region PERFIL (USADOS NA PERFIL)

        //Verifica PerfilMenu
        public bool VerificaPerfilMenu(int Mnu_Grupo, int Mnu_Sub1, int Mnu_Sub2, int Mnu_Sub3, int Mnu_Sub4, int Per_Codigo)
        {
            
            DataTable _dt;
            try
            {
                _strSql = "SELECT * FROM PerfilMenu " +
                          " WHERE Mnu_Grupo = " + Mnu_Grupo +
                          " AND Mnu_Sub1 = " + Mnu_Sub1 +
                          " AND Mnu_Sub2 = " + Mnu_Sub2 +
                          " AND Mnu_Sub3 = " + Mnu_Sub3 +
                          " AND Mnu_Sub4 = " + Mnu_Sub4 +
                          " AND Per_Codigo = " + Per_Codigo;
                _dt = RetornarDataTable(_strSql);
                if (_dt.Rows.Count > 0)
                    return true;
                else
                    return false;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                this.Dispose();
            }
        }
        
        /// <summary>
        /// Usada internamente no GravaPerfilMenu (abaixo 1 e 2);
        /// Verifica na PerfilMenu se existe ou nao o PerfilMenu que esta vindo na DataTable,
        /// ou aqueles que estao vindo por parametro(GravaPerfilMenu 2);
        /// </summary>
        /// <param name="Mnu_Grupo"></param>
        /// <param name="Mnu_Sub1"></param>
        /// <param name="Mnu_Sub2"></param>
        /// <param name="Mnu_Sub3"></param>
        /// <param name="Mnu_Sub4"></param>
        /// <param name="Per_Codigo"></param>
        /// <param name="cmd"></param>
        /// <returns></returns>
        public bool VerificaPerfilMenu(int Mnu_Grupo, int Mnu_Sub1, int Mnu_Sub2, int Mnu_Sub3, int Mnu_Sub4, int Per_Codigo, DbCommand cmd)
        {
            
            DataTable _dt;
            try
            {
                _strSql = "SELECT * FROM PerfilMenu " +
                          " WHERE Mnu_Grupo = " + Mnu_Grupo +
                          " AND Mnu_Sub1 = " + Mnu_Sub1 +
                          " AND Mnu_Sub2 = " + Mnu_Sub2 +
                          " AND Mnu_Sub3 = " + Mnu_Sub3 +
                          " AND Mnu_Sub4 = " + Mnu_Sub4 +
                          " AND Per_Codigo = " + Per_Codigo;
                _dt = RetornarDataTable(_strSql, cmd);
                if (_dt.Rows.Count > 0)
                    return true;
                else
                    return false;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                this.Dispose();
            }
        }

        /// <summary>
        /// Realiza o insert da Inclusão do perfil e da um add na lista para ser adicionado no comando de transaction
        /// </summary>
        /// <param name="Mnu_Grupo"></param>
        /// <param name="Mnu_Sub1"></param>
        /// <param name="Mnu_Sub2"></param>
        /// <param name="Mnu_Sub3"></param>
        /// <param name="Mnu_Sub4"></param>
        /// <param name="Per_Codigo"></param>
        /// <param name="UMnu_Habilita"></param>
        public void InclusaoPerfilMenu(int Mnu_Grupo, int Mnu_Sub1, int Mnu_Sub2, int Mnu_Sub3, int Mnu_Sub4, int Per_Codigo, int UMnu_Habilita)
        {
            StringBuilder _sql = new StringBuilder();
            try
            {
                _sql.Append(" INSERT INTO PerfilMenu ");
                _sql.Append("( Mnu_Grupo, ");
                _sql.Append("  Mnu_Sub1, ");
                _sql.Append("  Mnu_Sub2, ");
                _sql.Append("  Mnu_Sub3, ");
                _sql.Append("  Mnu_Sub4, ");
                _sql.Append("  Per_Codigo, ");
                _sql.Append("  PMnu_Habilita)");
                _sql.Append(" VALUES ");
                _sql.Append(" (" + Mnu_Grupo + ",");
                _sql.Append(Mnu_Sub1 + ",");
                _sql.Append(Mnu_Sub2 + ",");
                _sql.Append(Mnu_Sub3 + ",");
                _sql.Append(Mnu_Sub4 + ",");
                _sql.Append(Per_Codigo + ",");
                _sql.Append(UMnu_Habilita + ")");

                Lista.Add(_sql.ToString());
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// Realiza o delete da Exclusão do perfil e da um add na lista para ser adicionado no comando de transaction
        /// </summary>
        /// <param name="Mnu_Grupo"></param>
        /// <param name="Mnu_Sub1"></param>
        /// <param name="Mnu_Sub2"></param>
        /// <param name="Mnu_Sub3"></param>
        /// <param name="Mnu_Sub4"></param>
        public void ExclusaoPerfilMenu(int Mnu_Grupo, int Mnu_Sub1, int Mnu_Sub2, int Mnu_Sub3, int Mnu_Sub4, int Per_Codigo)
        {
            StringBuilder _sql = new StringBuilder();
            try
            {
                _sql.Append(" DELETE FROM PerfilMenu ");
                _sql.Append(" WHERE Mnu_Grupo = " + Mnu_Grupo);
                _sql.Append(" AND Mnu_Sub1 = " + Mnu_Sub1);
                _sql.Append(" AND Mnu_Sub2 = " + Mnu_Sub2);
                _sql.Append(" AND Mnu_Sub3 = " + Mnu_Sub3);
                _sql.Append(" AND Mnu_Sub4 = " + Mnu_Sub4);
                if (Per_Codigo > 0)
                    _sql.Append(" AND Per_Codigo = " + Per_Codigo);

                Lista.Add(_sql.ToString());
            }
            catch (Exception ex)
            {
                throw ex;
            }
 
        }
                
        /// <summary>
        /// Usada para gravar PerfilMenu;
        /// Usado no CadPerfil este metodo é chamado na função (Salvar),
        /// do frmCadPerfil;
        /// E chamar tambem o metodo GravaUsuarioPerfil (grava em cascata), o perfil
        /// que é gravado na perfilmenu, será gravado para o usuario que tem este perfil;
        /// Se o nó "pai de todos" for desmarcado este e os seus respectivos "filhos"
        /// serão deletados da tabela "perfilmenu", e também passaram a não aparecer
        /// nos menus dos usuario que possuiam este menu;
        /// </summary>
        /// <param name="_dt"></param>
        public void GravaPerfilMenu(DataTable _dt)
        {
            
            //
            DataRow[] rowAux;
            //
            
            try
            {

                rowAux = _dt.Select(" Mnu_Sub1 = 0 " +
                                      " AND Mnu_Sub2 = 0 " +
                                      " AND Mnu_Sub3 = 0 " +
                                      " AND Mnu_Sub4 = 0 " +
                                      " AND PMnu_Habilita = 0 ");
                if (rowAux.Length > 0)
                {
                    if (VerificaPerfilMenu(Convert.ToInt32(rowAux[0]["Mnu_Grupo"]),
                            Convert.ToInt32(rowAux[0]["Mnu_Sub1"]),
                            Convert.ToInt32(rowAux[0]["Mnu_Sub2"]),
                            Convert.ToInt32(rowAux[0]["Mnu_Sub3"]),
                            Convert.ToInt32(rowAux[0]["Mnu_Sub4"]),
                            Convert.ToInt32(rowAux[0]["Per_Codigo"])))
                    {
                        this.DeletarPerfilMenu(Convert.ToInt32(rowAux[0]["Per_Codigo"]),
                            Convert.ToInt32(rowAux[0]["Mnu_Grupo"]));
                    }
                }
                else
                {
                    //segundo for que altera os rows
                    foreach (DataRow row in _dt.Rows)
                    {
                        if (Convert.ToInt32(row["PMnu_Habilita"]) == 0)
                        {
                            //_strSql = " DELETE FROM PerfilMenu"
                            //        + " WHERE Mnu_Grupo = " + Convert.ToInt32(row["Mnu_Grupo"])
                            //        + " AND Mnu_Sub1 = " + Convert.ToInt32(row["Mnu_Sub1"])
                            //        + " AND Mnu_Sub2 = " + Convert.ToInt32(row["Mnu_Sub2"])
                            //        + " AND Mnu_Sub3 = " + Convert.ToInt32(row["Mnu_Sub3"])
                            //        + " AND Mnu_Sub4 = " + Convert.ToInt32(row["Mnu_Sub4"])
                            //        + " AND Per_Codigo = " + Convert.ToInt32(row["Per_Codigo"]);
                            ExclusaoPerfilMenu(Convert.ToInt32(row["Mnu_Grupo"])
                                                               , Convert.ToInt32(row["Mnu_Sub1"])
                                                               , Convert.ToInt32(row["Mnu_Sub2"])
                                                               , Convert.ToInt32(row["Mnu_Sub3"])
                                                               , Convert.ToInt32(row["Mnu_Sub4"])
                                                               , Convert.ToInt32(row["Per_Codigo"])
                            );
                            
                            ExclusaoUsuarioPerfil(Convert.ToInt32(row["Mnu_Grupo"])
                                                               , Convert.ToInt32(row["Mnu_Sub1"])
                                                               , Convert.ToInt32(row["Mnu_Sub2"])
                                                               , Convert.ToInt32(row["Mnu_Sub3"])
                                                               , Convert.ToInt32(row["Mnu_Sub4"])
                                                               , Convert.ToInt32(row["Per_Codigo"])
                                                               , string.Empty
                            );
                        }
                        else if(!VerificaPerfilMenu(Convert.ToInt32(row["Mnu_Grupo"]),
                            Convert.ToInt32(row["Mnu_Sub1"]),
                            Convert.ToInt32(row["Mnu_Sub2"]),
                            Convert.ToInt32(row["Mnu_Sub3"]),
                            Convert.ToInt32(row["Mnu_Sub4"]),
                            Convert.ToInt32(row["Per_Codigo"])))
                        {
                            //_strSql = " INSERT INTO PerfilMenu " +
                            //                "(  Mnu_Grupo, " +
                            //                "  Mnu_Sub1, " +
                            //                "  Mnu_Sub2, " +
                            //                "  Mnu_Sub3, " +
                            //                "  Mnu_Sub4, " +
                            //                "  Per_Codigo, " +
                            //                "  PMnu_Habilita )" +
                            //                " VALUES " +
                            //            " (" + Convert.ToInt32(row["Mnu_Grupo"]) + "," +
                            //                   Convert.ToInt32(row["Mnu_Sub1"]) + "," +
                            //                   Convert.ToInt32(row["Mnu_Sub2"]) + "," +
                            //                   Convert.ToInt32(row["Mnu_Sub3"]) + "," +
                            //                   Convert.ToInt32(row["Mnu_Sub4"]) + "," +
                            //                   Convert.ToInt32(row["Per_Codigo"]) + "," +
                            //                   Convert.ToInt32(row["PMnu_Habilita"]) + ")";

                            //Lista.Add(_strSql);
                            InclusaoPerfilMenu(Convert.ToInt32(row["Mnu_Grupo"])
                                                               , Convert.ToInt32(row["Mnu_Sub1"])
                                                               , Convert.ToInt32(row["Mnu_Sub2"])
                                                               , Convert.ToInt32(row["Mnu_Sub3"])
                                                               , Convert.ToInt32(row["Mnu_Sub4"])
                                                               , Convert.ToInt32(row["Per_Codigo"])
                                                               , 1
                            );
                        }
                        //
                        //GravaUsuarioPerfil(Convert.ToInt32(row["Mnu_Grupo"]),
                        //                    Convert.ToInt32(row["Mnu_Sub1"]),
                        //                    Convert.ToInt32(row["Mnu_Sub2"]),
                        //                    Convert.ToInt32(row["Mnu_Sub3"]),
                        //                    Convert.ToInt32(row["Mnu_Sub4"]),
                        //                    Convert.ToBoolean(row["PMnu_Habilita"]),
                        //                    Convert.ToInt32(row["Per_Codigo"]), Lista);
                    }
                    


                    ExecutarComandoTransacao(Lista);
                    Lista.Clear();
                }
            }
            catch (Exception ex)
            {
                //indica erro                
                throw ex;
            }
            finally
            {              
                Dispose();           
                this.Dispose();
            }
        }

        /// <summary>
        /// Grava perfilmenu de acordo com o menu,
        /// Salvei um novo menu o mesmo é gravado no perfilmenu;
        /// </summary>
        /// <param name="Mnu_Grupo"></param>
        /// <param name="Mnu_Sub1"></param>
        /// <param name="Mnu_Sub2"></param>
        /// <param name="Mnu_Sub3"></param>
        /// <param name="Mnu_Sub4"></param>
        /// <param name="Mnu_HabilitaPerfil"></param>
        /// <param name="cmd"></param>
        //public void GravaPerfilMenu(int Mnu_Grupo, int Mnu_Sub1, int Mnu_Sub2, int Mnu_Sub3, int Mnu_Sub4,Boolean Mnu_HabilitaPerfil ,List<string> Lista)
        //{
            
        //    //
        //    DataTable _dt = new DataTable();
        //    //
            
        //    //
        //    try
        //    {
        //        _strSql = ("SELECT Per_Codigo FROM PerfilMenu WHERE Mnu_Grupo = " + Mnu_Grupo +
        //                                      " Group By Per_Codigo ");

        //        _dt = RetornarDataTable(_strSql);
                
        //        //segundo for que altera os rows
        //        foreach (DataRow row in _dt.Rows)
        //        {
        //            //verifica se existe a perfil menu se existe é update se nao insert
        //            if (!VerificaPerfilMenu(Convert.ToInt32(Mnu_Grupo), Convert.ToInt32(Mnu_Sub1), Convert.ToInt32(Mnu_Sub2),
        //                                    Convert.ToInt32(Mnu_Sub3), Convert.ToInt32(Mnu_Sub4), Convert.ToInt32(row["Per_Codigo"].ToString()))
        //                && Convert.ToInt32(Mnu_HabilitaPerfil)==1)                      
        //            {
        //                _strSql = " INSERT INTO PerfilMenu " +
        //                                "(  Mnu_Grupo, " +
        //                                "  Mnu_Sub1, " +
        //                                "  Mnu_Sub2, " +
        //                                "  Mnu_Sub3, " +
        //                                "  Mnu_Sub4, " +
        //                                "  Per_Codigo, " +
        //                                "  PMnu_Habilita )" +
        //                                " VALUES " +
        //                            " (" + Mnu_Grupo + "," +
        //                                   Mnu_Sub1 + "," +
        //                                   Mnu_Sub2 + "," +
        //                                   Mnu_Sub3 + "," +
        //                                   Mnu_Sub4 + "," +
        //                                 Convert.ToInt32(row["Per_Codigo"]) + "," +
        //                                 Convert.ToInt32(0) + " )";
        //            }
        //            else if (Mnu_HabilitaPerfil)
        //            {
        //                _strSql = " UPDATE PerfilMenu "  +  
        //                          " SET PMnu_Habilita = PMnu_Habilita" + //Convert.ToBoolean(0) + 
        //                          " WHERE Mnu_Grupo = " + Mnu_Grupo +
        //                          " AND Mnu_Sub1 = " + Mnu_Sub1 +
        //                          " AND Mnu_Sub2 = " + Mnu_Sub2 +
        //                          " AND Mnu_Sub3 = " + Mnu_Sub3 +
        //                          " AND Mnu_Sub4 = " + Mnu_Sub4 +
        //                          " AND Per_Codigo = " + Convert.ToInt32(row["Per_Codigo"]);
        //            }
        //            else
        //            {
        //                _strSql = " DELETE FROM PerfilMenu " +
        //                          " WHERE Mnu_Grupo = " + Mnu_Grupo +
        //                          " AND Mnu_Sub1 = " + Mnu_Sub1 +
        //                          " AND Mnu_Sub2 = " + Mnu_Sub2 +
        //                          " AND Mnu_Sub3 = " + Mnu_Sub3 +
        //                          " AND Mnu_Sub4 = " + Mnu_Sub4 +
        //                          " AND Per_Codigo = " + Convert.ToInt32(row["Per_Codigo"]);
        //            }
        //            //
        //            Lista.Add(_strSql);
        //            //
        //            if (Mnu_HabilitaPerfil)
        //            {
        //                GravaUsuarioPerfil(Mnu_Grupo, Mnu_Sub1, Mnu_Sub2, Mnu_Sub3, Mnu_Sub4, Convert.ToBoolean(Mnu_HabilitaPerfil), Convert.ToInt32(row["Per_Codigo"]), Lista);
        //            }
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        //indica erro                
        //        throw ex;
        //    }
        //    finally
        //    {
        //        Dispose();
        //        this.Dispose();
        //    }
        //}

        /// <summary>
        /// Usado internamente no GravaPerfilMenu (acima - 1º);
        /// Se o nó "pai de todos" for desmarcado este e os seus respectivos "filhos"
        /// serão deletados da tabela "perfilmenu", e também passaram a não aparecer
        /// nos menus dos usuario que possuiam este menu;
        /// </summary>
        /// <param name="Per_Codigo"></param>
        /// <param name="Mnu_Grupo"></param>
        /// <param name="cmd"></param>
        public void DeletarPerfilMenu(int Per_Codigo, int Mnu_Grupo)
        {
            
            try
            {
                _strSql = " DELETE FROM PerfilMenu " +
                          " WHERE Per_Codigo = " + Per_Codigo +
                          " AND Mnu_Grupo = " + Mnu_Grupo;
                ExecutarComandoTransacao(_strSql);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                Dispose();
            }
        }

        #endregion

        #region USUARIO (USADOS NA USUARIO)

        /// <summary>
        /// Realiza o delete da Exclusão do perfil e da um add na lista para ser adicionado no comando de transaction
        /// </summary>
        /// <param name="Mnu_Grupo"></param>
        /// <param name="Mnu_Sub1"></param>
        /// <param name="Mnu_Sub2"></param>
        /// <param name="Mnu_Sub3"></param>
        /// <param name="Mnu_Sub4"></param>
        /// <param name="Per_Codigo"></param>
        /// <param name="Us_Login"></param>
        public void ExclusaoUsuarioPerfil(int Mnu_Grupo, int Mnu_Sub1, int Mnu_Sub2, int Mnu_Sub3, int Mnu_Sub4, int Per_Codigo, string Us_Login)
        {
            StringBuilder _sql = new StringBuilder();
            try
            {
                _sql.Append(" DELETE FROM UsuarioPerfil ");
                _sql.Append(" WHERE Mnu_Grupo = " + Mnu_Grupo);
                _sql.Append(" AND Mnu_Sub1 = " + Mnu_Sub1);
                _sql.Append(" AND Mnu_Sub2 = " + Mnu_Sub2);
                _sql.Append(" AND Mnu_Sub3 = " + Mnu_Sub3);
                _sql.Append(" AND Mnu_Sub4 = " + Mnu_Sub4);
                if (Per_Codigo > 0)
                    _sql.Append(" AND Per_Codigo = " + Per_Codigo);
                if (!string.IsNullOrEmpty(Us_Login))
                    _sql.Append(" AND Us_Login = '" + Us_Login + "'");

                Lista.Add(_sql.ToString());
            }
            catch (Exception ex)
            {
                throw ex;
            }
 
        }

        /// <summary>
        /// Realiza o insert da Inclusão do usuário e da um add na lista para ser adicionado no comando de transaction
        /// </summary>
        /// <param name="Mnu_Grupo"></param>
        /// <param name="Mnu_Sub1"></param>
        /// <param name="Mnu_Sub2"></param>
        /// <param name="Mnu_Sub3"></param>
        /// <param name="Mnu_Sub4"></param>
        /// <param name="Per_Codigo"></param>
        /// <param name="Us_Login"></param>
        /// <param name="UMnu_Habilita"></param>
        /// 
        public void InclusaoUsuarioPerfil(int Mnu_Grupo, int Mnu_Sub1, int Mnu_Sub2, int Mnu_Sub3, int Mnu_Sub4, int Per_Codigo, string Us_Login, int UMnu_Habilita)
        {
            StringBuilder _sql = new StringBuilder();
            try
            {
                _sql.Append(" INSERT INTO UsuarioPerfil ");
                            _sql.Append("( Us_Login, ");
                            _sql.Append("  Mnu_Grupo, ");
                            _sql.Append("  Mnu_Sub1, ");
                            _sql.Append("  Mnu_Sub2, ");
                            _sql.Append("  Mnu_Sub3, ");
                            _sql.Append("  Mnu_Sub4, ");
                            _sql.Append("  Per_Codigo, ");
                            _sql.Append("  UMnu_Habilita)");
                _sql.Append(" VALUES ");
                            _sql.Append(" ('" + Us_Login + "',");
                            _sql.Append(Mnu_Grupo + ",");
                            _sql.Append(Mnu_Sub1 + ",");
                            _sql.Append(Mnu_Sub2 + ",");
                            _sql.Append(Mnu_Sub3 + ",");
                            _sql.Append(Mnu_Sub4 + ",");
                            _sql.Append(Per_Codigo + ",");
                            _sql.Append(UMnu_Habilita + ")");
             
                Lista.Add(_sql.ToString());
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// Usada no CadUsuario para gravar o UsuarioPerfil;
        /// Grava o Perfil(nivel de acesso) que o usuario terá dentro do sistema;
        /// </summary>
        /// <param name="_dt"></param>
        /// <param name="Us_Login"></param>
        public void GravaUsuarioPerfil(DataTable _dt, string Us_Login)
        {
            try
            {

                //foreach que altera os rows
                foreach (DataRow row in _dt.Rows)
                {
                    if (Convert.ToInt16(row["UMnu_Habilita"]) == 0)
                    {

                        #region antigo
                        //_strSql = "DELETE FROM UsuarioPerfil " +
                        //          " WHERE Mnu_Grupo = " + Convert.ToInt32(row["Mnu_Grupo"]) +
                        //          " AND Mnu_Sub1 = " + Convert.ToInt32(row["Mnu_Sub1"]) +
                        //          " AND Mnu_Sub2 = " + Convert.ToInt32(row["Mnu_Sub2"]) +
                        //          " AND Mnu_Sub3 = " + Convert.ToInt32(row["Mnu_Sub3"]) +
                        //          " AND Mnu_Sub4 = " + Convert.ToInt32(row["Mnu_Sub4"]) +
                        //          " AND Per_Codigo = " + Convert.ToInt32(row["Per_Codigo"]) +
                        //          " AND Us_Login = '" + Us_Login + "'";
                        #endregion

                        ExclusaoUsuarioPerfil(Convert.ToInt32(row["Mnu_Grupo"]) 
                                                           , Convert.ToInt32(row["Mnu_Sub1"]) 
                                                           , Convert.ToInt32(row["Mnu_Sub2"]) 
                                                           , Convert.ToInt32(row["Mnu_Sub3"]) 
                                                           , Convert.ToInt32(row["Mnu_Sub4"]) 
                                                           , Convert.ToInt32(row["Per_Codigo"])
                                                           , Us_Login == string.Empty ? row["Us_Login"].ToString():Us_Login);
                    }
                    else if (!VerificaUsuarioPerfil(Convert.ToInt32(row["Mnu_Grupo"]),
                                    Convert.ToInt32(row["Mnu_Sub1"]),
                                    Convert.ToInt32(row["Mnu_Sub2"]),
                                    Convert.ToInt32(row["Mnu_Sub3"]),
                                    Convert.ToInt32(row["Mnu_Sub4"]),
                                    Convert.ToInt32(row["Per_Codigo"]),
                                    Us_Login == string.Empty ? row["Us_Login"].ToString() : Us_Login))
                    {

                        #region antigo
                        //_strSql = " INSERT INTO UsuarioPerfil " +
                        //                    "( Us_Login, " +
                        //                    "  Mnu_Grupo, " +
                        //                    "  Mnu_Sub1, " +
                        //                    "  Mnu_Sub2, " +
                        //                    "  Mnu_Sub3, " +
                        //                    "  Mnu_Sub4, " +
                        //                    "  Per_Codigo, " +
                        //                    "  UMnu_Habilita)" +
                        //                    " VALUES " +
                        //                " ('" + Us_Login + "'," +
                        //                       Convert.ToInt32(row["Mnu_Grupo"]) + "," +
                        //                       Convert.ToInt32(row["Mnu_Sub1"]) + "," +
                        //                       Convert.ToInt32(row["Mnu_Sub2"]) + "," +
                        //                       Convert.ToInt32(row["Mnu_Sub3"]) + "," +
                        //                       Convert.ToInt32(row["Mnu_Sub4"]) + "," +
                        //                       Convert.ToInt32(row["Per_Codigo"]) + "," +
                        //                       Convert.ToInt32(row["UMnu_Habilita"]) + ")";
                        #endregion

                        InclusaoUsuarioPerfil(Convert.ToInt32(row["Mnu_Grupo"])
                                              , Convert.ToInt32(row["Mnu_Sub1"])
                                              , Convert.ToInt32(row["Mnu_Sub2"])
                                              , Convert.ToInt32(row["Mnu_Sub3"])
                                              , Convert.ToInt32(row["Mnu_Sub4"])
                                              , Convert.ToInt32(row["Per_Codigo"])
                                              , Us_Login == string.Empty ? row["Us_Login"].ToString() : Us_Login
                                              , 1              
                        );
                    }
                }
                ExecutarComandoTransacao(Lista);
                Lista.Clear();
            }
            catch (Exception ex)
            {               
                throw ex;
            }
            finally
            {
                Dispose();
                this.Dispose();
            }
        }

        ///// <summary>
        ///// Grava usuarioperfil de acordo com o menu, 
        ///// salvei um novo menu o mesmo é gravado no usuarioperfil
        ///// Usada internamente para gravar em cascata;
        ///// </summary>
        ///// <param name="Mnu_Grupo"></param>
        ///// <param name="Mnu_Sub1"></param>
        ///// <param name="Mnu_Sub2"></param>
        ///// <param name="Mnu_Sub3"></param>
        ///// <param name="Mnu_Sub4"></param>
        ///// <param name="Us_Login"></param>
        ///// <param name="Per_Codigo"></param>
        ///// <param name="cmd"></param>
        //public void GravaUsuarioPerfil(int Mnu_Grupo, int Mnu_Sub1, int Mnu_Sub2, int Mnu_Sub3, int Mnu_Sub4, Boolean UMnu_Habilita, int Per_Codigo,List<string> Lista)
        //{
        //    DataTable _dt = new DataTable();
            
        //    try
        //    {
        //        _strSql = ("SELECT Us_Login FROM UsuarioPerfil WHERE Per_Codigo = " + Per_Codigo +
        //                                       " Group By Us_Login ");               

        //        _dt = RetornarDataTable(_strSql);
                
        //        //foreach que altera os rows
        //        foreach (DataRow row in _dt.Rows)
        //        {
        //            if (!VerificaUsuarioPerfil(Mnu_Grupo, Mnu_Sub1, Mnu_Sub2, Mnu_Sub3, Mnu_Sub4, Per_Codigo, row["Us_Login"].ToString()))
        //            {
        //                _strSql = " INSERT INTO UsuarioPerfil " +
        //                                    "( Us_Login, " +
        //                                    "  Mnu_Grupo, " +
        //                                    "  Mnu_Sub1, " +
        //                                    "  Mnu_Sub2, " +
        //                                    "  Mnu_Sub3, " +
        //                                    "  Mnu_Sub4, " +
        //                                    "  Per_Codigo, " +
        //                                    "  UMnu_Habilita)" +
        //                                    " VALUES " +
        //                                " ('" +  Convert.ToString(row["Us_Login"]) + "'," +
        //                                         Mnu_Grupo + "," +
        //                                         Mnu_Sub1 + "," +
        //                                         Mnu_Sub2 + "," +
        //                                         Mnu_Sub3 + "," +
        //                                         Mnu_Sub4 + "," +
        //                                         Per_Codigo + "," +
        //                                         //Convert.ToInt32(UMnu_Habilita) + " )";
        //                                         0 + " )";
        //            }
        //            else
        //            {
        //                _strSql = " UPDATE UsuarioPerfil " +
        //                          " SET UMnu_Habilita = 0" + //Convert.ToInt32(UMnu_Habilita) + //+ Convert.ToBoolean(0) + 
        //                          " WHERE Mnu_Grupo = " + Mnu_Grupo +
        //                          " AND Mnu_Sub1 = " + Mnu_Sub1 +
        //                          " AND Mnu_Sub2 = " + Mnu_Sub2 +
        //                          " AND Mnu_Sub3 = " + Mnu_Sub3 +
        //                          " AND Mnu_Sub4 = " + Mnu_Sub4 +
        //                          " AND Per_Codigo = " + Per_Codigo +
        //                          " AND Us_Login = '" + Convert.ToString(row["Us_Login"]) + "'";
        //            }
        //            //
        //            Lista.Add(_strSql);
        //        }               
        //    }
        //    catch (Exception ex)
        //    {
        //        //indica erro               
        //        throw ex;
        //    }
        //    finally
        //    {
               
        //    }
        //}

        /// <summary>
        /// Verifica se UsuarioPerfil existe, usado internamente no metodo GravaUsuarioPerfil;
        /// </summary>
        /// <param name="Us_Login"></param>
        /// <param name="Per_Codigo"></param>
        /// <param name="Mnu_Grupo"></param>
        /// <returns></returns>
        public bool VerificaUsuarioPerfil(string Us_Login, int Per_Codigo, int Mnu_Grupo)
        {
            
            DataTable _dt;
            try
            {
                _strSql = "SELECT * " +
                        " FROM UsuarioPerfil " +
                        " WHERE Us_Login = '" + Us_Login + "' " +
                        " AND Per_Codigo = " + Per_Codigo +
                        " AND Mnu_Grupo = " + Mnu_Grupo;
                _dt = RetornarDataTable(_strSql);

                if (_dt.Rows.Count > 0)
                    return true;
                else
                    return false;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                
            }
        }

        public bool VerificaUsuarioPerfil(string Us_Login, int Per_Codigo, int Mnu_Grupo, DbCommand cmd)
        {
            
            DataTable _dt;
            try
            {
                _strSql = "SELECT * " +
                        " FROM UsuarioPerfil " +
                        " WHERE Us_Login = '" + Us_Login + "' " +
                        " AND Per_Codigo = " + Per_Codigo +
                        " AND Mnu_Grupo = " + Mnu_Grupo;
                _dt = RetornarDataTable(_strSql, cmd);

                if (_dt.Rows.Count > 0)
                    return true;
                else
                    return false;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                
            }
        }

        //Verifica UsuarioMenu usada internamente na clsMenu
        public bool VerificaUsuarioPerfil(int Mnu_Grupo, int Mnu_Sub1, int Mnu_Sub2, int Mnu_Sub3, int Mnu_Sub4,int Per_Codigo, string Us_Login)
        {
            
            DataTable _dt;
            try
            {
                _strSql = "SELECT * FROM UsuarioPerfil " +
                          " WHERE Mnu_Grupo = " + Mnu_Grupo +
                          " AND Mnu_Sub1 = " + Mnu_Sub1 +
                          " AND Mnu_Sub2 = " + Mnu_Sub2 +
                          " AND Mnu_Sub3 = " + Mnu_Sub3 +
                          " AND Mnu_Sub4 = " + Mnu_Sub4 +
                          " AND Per_Codigo = " + Per_Codigo +
                          " AND Us_Login = '" + Us_Login + "'";
                _dt = RetornarDataTable(_strSql);

                if (_dt.Rows.Count > 0)
                    return true;
                else
                    return false;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                
            }
        }
        
        /// <summary>
        /// Usada internamente no metodo grava UsuarioPerfil(acima o 1º);
        /// Verifica se o Perfil do usuari já existe ou não;
        /// </summary>
        /// <param name="Mnu_Grupo"></param>
        /// <param name="Mnu_Sub1"></param>
        /// <param name="Mnu_Sub2"></param>
        /// <param name="Mnu_Sub3"></param>
        /// <param name="Mnu_Sub4"></param>
        /// <param name="Per_Codigo"></param>
        /// <param name="Us_Login"></param>
        /// <param name="cmd"></param>
        /// <returns></returns>
        public bool VerificaUsuarioPerfil(int Mnu_Grupo, int Mnu_Sub1, int Mnu_Sub2, int Mnu_Sub3, int Mnu_Sub4, int Per_Codigo, string Us_Login, DbCommand cmd)
        {
            
            DataTable _dt;
            try
            {
                _strSql = "SELECT * FROM UsuarioPerfil " +
                          " WHERE Mnu_Grupo = " + Mnu_Grupo +
                          " AND Mnu_Sub1 = " + Mnu_Sub1 +
                          " AND Mnu_Sub2 = " + Mnu_Sub2 +
                          " AND Mnu_Sub3 = " + Mnu_Sub3 +
                          " AND Mnu_Sub4 = " + Mnu_Sub4 +
                          " AND Per_Codigo = " + Per_Codigo +
                          " AND Us_Login = '" + Us_Login + "'";
                _dt = RetornarDataTable(_strSql, cmd);

                if (_dt.Rows.Count > 0)
                    return true;
                else
                    return false;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                
            }
        }

        /// <summary>
        /// Verifica se o form chamado, o usuário logado tem permissão.
        /// </summary>
        /// <param name="nomeForm">Nome do Formulario, a ser aberto</param>
        /// <returns></returns>
        public bool RetornaPermissao(string nomeForm, string _idFuncionario)
        {
            DataTable _dt;
            try
            {
                _strSql = "SELECT * FROM Menu m  "
                        + " INNER JOIN UsuarioPerfil um ON  m.Mnu_grupo = um.Mnu_Grupo "
                        + " AND m.mnu_sub1 = um.Mnu_sub1 "
                        + " AND m.mnu_sub2 = um.Mnu_sub2 "
                        + " AND m.mnu_sub3 = um.Mnu_sub3 "
                        + " AND m.mnu_sub4 = um.Mnu_sub4 "
                        + " WHERE um.Us_Login = '" + _idFuncionario + "' "
                        //+ " AND m.Mnu_HabilitaPerfil = 1 "
                        + " AND (case when m.Mnu_HabilitaPerfil is null then 0 else m.Mnu_HabilitaPerfil end) = 1 "
                        + " AND m.Mnu_NomeForm = '" + nomeForm + "'";
                _dt = RetornarDataTable(_strSql);

                if (_dt.Rows.Count > 0)
                    return true;
                else
                    return false;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {

            }
        }
        
        #endregion  

        /// <summary>
        /// Utilizado para retornar a configuração dos programas, foi criado este método para
        /// substituir pelo .config
        /// </summary>
        /// <param name="tag">É a tag desejada, caso ele venha em branco é retornado todas as configurações</param>
        /// <returns></returns>
        public DataTable RetornaConfigPrograma(string tag)
        { 
            StringBuilder _sql = new StringBuilder();
            try
            {
                _sql.Append("select CP_tag, CP_Valor from config_programa");
                if(!string.IsNullOrEmpty(tag))
                    _sql.Append(" where CP_tag = '" + tag + "'");

                return RetornarDataTable(_sql.ToString());
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    
        #region IDisposable Members

        public virtual void Dispose()
        {
            GC.SuppressFinalize(this);
        }

        #endregion
    }
}